Application publishing and server-based computing allow a client computing device to access and utilize an application program or operating system that runs on a remote server computing system (a server). The server sends a user interface, such as a graphical user interface for the application or a desktop user interface for the operating system, over a network to the client device. As a user provides input to an input device associated with the client device, the client device sends the received input over the network to the server so that the application or operating system can process the input and, potentially, update the client user interface, which is eventually rendered on the client device.
When such an interface is rendered on the client device, it may be referred to as a “remoted” interface, because the interface rendered on the client device corresponds to code running remotely on either a physical or virtual server computing system (a server). In some cases, the client device (the client) may be resident on the same physical computing system as the server, and hence “remoted” refers to the server executing outside the client process. In other cases the client device and server computing system are executing on different physical or virtual machines and may communicate over standard networking mechanisms such as using TCP/IP or other protocols and “remoted” refers to running over a network, such as a local or wide-area network.
Different mechanisms exist for providing a remoted user interface. Remote Desktop Services (RDS) is a component of the Microsoft Windows operating system that allows a user (via a client device) to access the operating system, applications, and data on a remote computer over a network. RDS employs a protocol known as the Remote Desktop Protocol (RDP) for remoting a desktop over a network. The server component of RDS is called Terminal Server, which listens on a configured TCP port. When an RDP client connects to this port, it is associated with a unique TCP session. Microsoft Windows authenticates the user and the Microsoft Windows RDS virtual display driver presents the user interface (UI) to the client device. Once a client initiates a connection and is informed of a successful connection to the server, it loads keyboard/mouse drivers delivered to it over the network by the server. The graphical user interface (GUI) data received over RDP is decoded and rendered as a GUI on the client machine using the downloaded keyboard/mouse drivers. Keyboard and mouse inputs by the user to the client device ordinarily are transmitted to the server to allow a user control and access applications and data on the remote server.
Virtual Network Computing (VNC) is a graphical desktop sharing system that typically uses the Remote Frame Buffer (RFB) protocol to allow a client to remotely control a server computing system over a persistent TCP connection. The RFB protocol allows the server to update the frame buffer displayed on a VNC viewer running on the client device. In general terms, a frame buffer typically occupies a portion of a RAM used for temporary storage of image data that is available for display. A VNC viewer running on an operating system on a client device may connect to a VNC server running on the same or a different operating system to receive data. According to the RFB protocol, the server sends small rectangles of the server machine frame buffer to the client, which the client then assembles to form and render the graphical user interface on the client. VNC allows for various encoding methods to determine the most efficient way to transfer the rectangles from the server frame buffer to the client VNC viewer. The VNC protocol ordinarily allows the client and server to negotiate which encoding will be used. One encoding method supported by most VNC clients and servers, is “raw encoding,” in which pixel data is sent in left-to-right scan-line order, and in which after the first or original full screen has been transmitted, only frame buffer rectangles that have changed are transferred.
Some VNC implementations, e.g., “RealVNC,” available from RealVNC Ltd. of Cambridge, UK, use a Hypertext Transfer Protocol (HTTP) server to provide a VNC viewer to the client as a Java applet. The Java applet then connects to the VNC server for remote UI access over a separate persistent TCP connection. Yet another VNC implementation, referred to as “ThinVNC,” available from Cybele Software, Inc. of Wilmington, Del., uses the Web Socket protocol of HTML5 for remote access to a user interface. Web Socket involves use of a persistent TCP connection between a client and a server that runs a remote application. WebSocket uses HTTP as a conduit to set up persistent connection between client and server. In particular, WebSocket features an HTTP-compatible handshake that allows a server to interpret part of the handshake request as HTTP and then switch to WebSocket.
Existing technologies therefore require persistent connections for remoting a user interface or use advanced, and potentially insecure, web technologies such as WebSockets, which are not always available. In addition, for each client access to the data, a separate connection to the server is maintained, and the server typically keeps a separate frame buffer and state information for each such client device connected—even if they are sharing and/or viewing the same data or user interface. Such duplication results in many inefficiencies including drag on the network and may increase latency for each user.
In particular, a server typically maintains state information for each client device (user) that is viewing the remoted user interface. This state information may encompass maintaining a connection, keeping one or more copies of the physical screen buffer (or virtual screen buffer, depending upon the remoting mechanism) of the server that corresponds to the client. In addition, a series of state machines and/or change rectangles may be stored by the server to remember the state of the client for use calculating screen updates (image updates). Such state information is often used to save bandwidth to allow the server to just send frame buffer updates instead of the entire frame buffer at each user interface update cycle. Some remoting protocols even keep multiple copies of the frame buffer and/or state machine (also referred to as a “stack”) for each user. Thus, if multiple users/client devices are sharing the same application or user interface, the overhead of maintaining state for the remote display protocols for each user/client can be significant, especially when interfaces are shared with thousands or even tens of thousands of user.